#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>
//int main()
//{
//	char s[] = "\\123456\123456\t";
//	printf("%d\n", strlen(s));
//	return 0;
//}

//int main()
//{
//	double a = 0;
//	if (a == 0.0)
//	{
//		printf("haha");
//	}
//	else
//	{
//		printf("hehe");
//	}
//	return 0;
//}

//int main()
//{
//	int a = 248, b = 4;
//	int const* c = 21;
//	const int* d = &a;
//	int* const e = &b;
//	int const* const f = &a;
//	return 0;
//}


//#include <stdio.h>
//	int i;
//	void prt()
//	{
//		for (i = 5; i < 8; i++)
//			printf("%c", '*');
//		printf("\t");
//	} 
//	int main()
//	{
//		for (i = 5; i <= 8; i++)
//			prt();
//		return 0;
//	}

//#include <stdio.h>
//
//int main() {
//    int n;
//    while (scanf("%d", &n) != EOF) { // 注意 while 处理多个 case
//        // 64 位输出请用 printf("%lld") to 
//        int i = 0;
//        int arr[2000] = { 0 };
//        for (i = 0; i < n; i++)
//        {
//            scanf("%d", &arr[i]);
//        }
//        int countf = 0;
//        int countz = 0;
//        double sum = 0;
//        double average = 0;
//        for (i = 0; i < n; i++)
//        {
//            if (arr[i] > 0)
//            {
//                countz++;
//                sum += arr[i];
//            }
//            else if (arr[i] < 0)
//            {
//                countf++;
//            }
//        }
//        if (countz == 0)
//        {
//            printf("%d 0.0", countf);
//        }
//        else
//        {
//            average = sum / countz;
//            printf("%d %.1f", countf, average);
//        }
//    }
//    return 0;
//}

//#include <stdio.h>
//#include<string.h>
//int main() {
//    int n;
//    while (scanf("%d", &n) != EOF) { // 注意 while 处理多个 case
//        for (int i = 0; i < n; i++)
//        {
//            char str[101] = { 0 };
//            scanf("%s", str);
//            int flag_up = 0;
//            int flag_low = 0;
//            int flag_num = 0;
//            if (str[0] >= '0' && str[0] <= '9') //数字开头
//            {
//                printf("NO\n");
//                continue;
//            }
//            if (strlen(str) < 8)    //长度小于8
//            {
//                printf("NO\n");
//                continue;
//            }
//            int flag = 0;
//            for (int j = 0; str[j] != '\0'; j++)
//            {
//                if (str[j] >= 'a' && str[j] <= 'z')
//                    flag_low = 1;
//                else if (str[j] >= 'A' && str[j] <= 'Z')
//                    flag_up = 1;
//                else if (str[j] >= '0' && str[j] <= '9')
//                    flag_num = 1;
//                else
//                    flag = 1;
//            }
//            if (flag == 1)
//            {
//                printf("NO\n");
//                continue;
//            }
//            if (flag_low + flag_num + flag_up >= 2)
//                printf("YES\n");
//            else
//                printf("NO\n");
//                
//        }
//    }
//    return 0;
//}

#include<stdio.h>

/**
 * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
 *
 *
 * @param nums int整型一维数组
 * @param numsLen int nums数组长度
 * @param k int整型
 * @return int整型
 */
//int GetNumberOfK(int* data, int dataLen, int k) {
//    // write code here
//    if (dataLen == 0) {
//        return 0;
//    }
//    else if (data[dataLen - 1]<k || data[0]>k) {
//        return 0;
//    }
//    else {
//        int leftbound, rightbound;
//        int mid;
//        int left = 0, right = dataLen - 1;
//        if (left == right) {
//            return k == data[left];
//        }
//        else {
//            //寻找下界
//            while (left < right) {//结束时left==right
//                mid = (left + right) / 2;
//                if (data[mid] < k) {
//                    left = mid + 1;
//                }
//                else {
//                    right = mid;
//                }
//            }
//            leftbound = left;
//            //寻找上界
//            left = 0, right = dataLen - 1;
//            while (left < right) {//结束时left==right
//                mid = (left + right) / 2+1 ;
//                if (data[mid] > k) {
//                    right = mid - 1;
//                }
//                else {
//                    left = mid;
//                }
//                rightbound = right;
//            }
//            return rightbound - leftbound + 1;
//        }
//    }
//
//}
//
//int main()
//{
//    int arr[] = {3,3,3,3};
//
//    int n = GetNumberOfK(arr,4,3);
//    printf("%d", n);
//    return 0;
//}
//int cmp(int* a, int* b)
//{
//    return *a - *b;
//}
//int dominantIndex(int* nums, int numsSize) {
//    if (numsSize == 1)
//        return 0;
//    int max = 0;
//    for (int j = 1; j < numsSize ; j++)
//    {
//        if (nums[max] < nums[j])
//            max = j;
//    }
//    qsort(nums, numsSize, sizeof(int), cmp);
//    for (int i = numsSize - 2; i >= 0; i--)
//    {
//        if (2 * nums[i] > nums[numsSize - 1])
//        {
//            return -1;
//        }
//    }
//    return max;
//}
//int main()
//{
//    int arr[] = { 0,0,0,1 };
//    printf("%d",dominantIndex(arr, 4));
//	return 0;
//}
#include <stdio.h>
#include<string.h>
int main() {
    char str[1001] = { 0 };
    while (scanf("%s", str) != EOF) { // 注意 while 处理多个 case
        // 64 位输出请用 printf("%lld") to 
        int i = 0; int j = 0;
        for (i = 0; i < strlen(str) - 1; i++)
        {
            int flag = 0;
            for (j = 0; j < strlen(str) - 1 - i; j++)
            {
                if (str[j] > str[j + 1])
                {
                    char temp = str[j];
                    str[j] = str[j + 1];
                    str[j + 1] = temp;
                    flag = 1;
                }
            }
            if (flag == 0)
                break;
        }
        printf("%s", str);
    }
    return 0;
}